Orquídeas en Costa Rica

Author

Mónica Ruiz

Introducción

El siguiente documento se desarolla en tres contenidos relacionados a la riqueza de orquídeas que hay en Costa Rica: Mapa de riqueza de especies de orquídeas en áreas de conservación, gráfico de barras de la riqueza y gráfico de barras de cantidad de registros de presencia por las 10 especies más relevantes.

El documento cuenta con dos tipos de datos: Áreas de conservación de Costa Rica en Web Feature Service (WFS) publicado por el Sistema Nacional de Áreas de Conservación (Sinac), el cual nos ayuda a tener la ubicación en un mapa de la delimitación de las diez áreas de conservación que existen en Costa Rica. El otro dato utilizado es:Registros de presencia de orquídeas de Costa Rica obtenidos a través de una consulta al portal de datos de GBIF.

Carga de paquetes

Code
# Carga de paquetes
library(tidyverse)
library(plotly)
library(DT)
library(sf)
library(rgdal)
library(raster)
library(terra)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(viridisLite)

Carga de datos

Code
# Carga de datos de área de conservación

areasconservacion <-
  st_read(
    dsn = "M:/Documentos Mónica/UCR/Geografía/I Semestre 2023/Procesamiento de Datos Geo/Tareas/Tarea 03/areas_conservacion_simp_10m.geojson",
    quiet = TRUE
  ) |>
  st_transform(4326) # reproyección a WGS84

Carga de datos orquídeas de Costa Rica

Code
# Carga de datos de orquídeas de Costa Rica
orquideas <-
  st_read(
    "M:/Documentos Mónica/UCR/Geografía/I Semestre 2023/Procesamiento de Datos Geo/Tareas/Tarea 03/orquideas.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
      "Y_POSSIBLE_NAMES=decimalLatitude"   # columna de latitud decimal
    ),
    quiet = TRUE
  )

# Asignación del CRS WGS84
st_crs(orquideas) <- 4326

Mapa de riqueza de especies de orquídeas en áreas de conservación

1. Unión espacial de orquídeas y áreas de conservación

Code
# Unión espacial de orquídeas  y áreas de conservación (solo la columna objectid),
# mediante el predicado st_within().
# Como resultado, cod_provin se une al conjunto de datos de viperidos.
orquideas_union_areasconservacion <- 
  st_join(
    x = orquideas,
    y = dplyr::select(areasconservacion, objectid),
    join = st_within
  )

# Despliegue de los datos unidos de orquídeas y la columna objetid de areas de conservación
orquideas_union_areasconservacion |>
  st_drop_geometry() |>
  dplyr::select(species, locality, objectid) |>
  datatable(
    colnames = c("Especie", "Localidad", "Código área de conservación"),
    options = list(
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

2. Conteo de la cantidad de especies de orquídeas en cada área de conservación

Code
# Conteo de la cantidad de especies de orquídeas en las áreas de conservación
riqueza_especies_orquideas_areas_conservacion <-
  orquideas_union_areasconservacion |>
  st_drop_geometry() |>
  group_by(objectid) |>
  summarize(riqueza_especies_orquideas = n_distinct(species, na.rm = TRUE))

# Despliegue de la cantidad de especies de orquídeas en cada área de conservación
riqueza_especies_orquideas_areas_conservacion |>
  arrange(desc(riqueza_especies_orquideas)) |>
  datatable(
    colnames = c("Código de área de conservación", "Riqueza de especies de orquídeas"),
    options = list(
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

3. Unión no espacial de áreas de conservación con el dataframe de riqueza de especies en áreas de conservación

Code
# Unión (no espacial) de áreas de conservación y riqueza de especies de orquídeas
areas_conservacion_union_riqueza <-
  left_join(
    x = areasconservacion,
    y = dplyr::select(riqueza_especies_orquideas_areas_conservacion, objectid, riqueza_especies_orquideas),
    by = "objectid"
  ) |>
  replace_na(list(riqueza_especies_orquideas = 0))

# Despliegue de los datos de riqueza de especies en áreas de conservación
areas_conservacion_union_riqueza |>
 st_drop_geometry() |>
  dplyr::select(nombre_ac, riqueza_especies_orquideas) |>
  arrange(desc(riqueza_especies_orquideas)) |>
  datatable(
    colnames = c("Áreas de conservación", "Riqueza de especies de orquídeas"),
    options = list(
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

4. Generación del mapa de riqueza de especies de orquídeas

Code
# Paleta de colores de riqueza de especies
colores_riqueza_especies <-
  colorNumeric(
    palette = "Reds",
    domain = areas_conservacion_union_riqueza$riqueza_especies_orquideas,
    na.color = "transparent"
  )

# Paleta de colores de especies
colores_especies <- colorFactor(
  palette = viridis(length(unique(orquideas$species))), 
  domain = orquideas$species
)

# Mapa leaflet
leaflet() |>
  setView(
    lng = -84.19452,
    lat = 9.572735,
    zoom = 7) |>
  addTiles(group = "Mapa general (OpenStreetMap)") |>
  addProviderTiles(
    providers$Esri.WorldImagery, 
    group = "Imágenes satelitales (ESRI World Imagery)"
  ) |> 
  addPolygons(
    data = areas_conservacion_union_riqueza,
    fillColor = ~ colores_riqueza_especies(areas_conservacion_union_riqueza$riqueza_especies_orquideas),
    fillOpacity = 0.8,
    color = "black",
    stroke = TRUE,
    weight = 1.0,
    popup = paste(
      paste("<strong>nombre_ac:</strong>", areas_conservacion_union_riqueza$nombre_ac),
      paste("<strong>Riqueza de especies:</strong>", areas_conservacion_union_riqueza$riqueza_especies_orquideas),
      sep = '<br/>'
    ),
    group = "Riqueza de especies de Orquídeas"
  ) |>
  addScaleBar(
    position = "bottomleft", 
    options = scaleBarOptions(imperial = FALSE)
  ) |>    
  addLegend(
    position = "bottomleft",
    pal = colores_riqueza_especies,
    values = areas_conservacion_union_riqueza$riqueza_especies_orquideas,
    group = "Riqueza de especies de Orquídeas",
    title = "Riqueza de especies"
  ) |>
  addCircleMarkers(
    data = orquideas,
    stroke = F,
    radius = 4,
    fillColor = ~colores_especies(orquideas$species),
    fillOpacity = 1.0,
    popup = paste(
      paste0("<strong>Especie: </strong>", orquideas$species),
      paste0("<strong>Localidad: </strong>", orquideas$locality),
      paste0("<strong>Fecha: </strong>", orquideas$eventDate),
      paste0("<strong>Fuente: </strong>", orquideas$institutionCode),
      paste0("<a href='", orquideas$occurrenceID, "'>Más información</a>"),
      sep = '<br/>'
    ),    
    group = "Registros de presencia"
  ) |>  
  addLegend(
    position = "bottomleft",    
    pal = colores_especies,
    values = orquideas$species,
    title = "Especies",
    group = "Registros de presencia"    
  ) |>  
  addLayersControl(
    baseGroups = c(
      "Mapa general (OpenStreetMap)", 
      "Imágenes satelitales (ESRI World Imagery)"
    ),
    overlayGroups = c(
      "Riqueza de especies",
      "Registros de presencia"
    )
  ) |>
  addResetMapButton() |>
  addSearchOSM() |>
  addMouseCoordinates() |>
  addFullscreenControl() |>
  hideGroup("Registros de presencia")

Riqueza de especies de orquídeas en áreas de conservación

Code
tabla_riqueza <-

merge(x= as.data.frame(orquideas_union_areasconservacion), ## tabla
      y=areasconservacion, 
             by="objectid") |> 
      dplyr::select(nombre_ac)


grafico_barras_ggplot2 <-
tabla_riqueza |>
  ggplot(aes(x = fct_infreq(nombre_ac))) + 
  geom_bar(
    aes(
      text = paste0(
        "Cantidad de orquídeas: ", after_stat(count)
      )
    )    
  ) +
  ggtitle("Gráfico de barras de riqueza de especies de orquídeas en áreas de conservación") +
  xlab("Áreas de conservación") +
  ylab("Cantidad de especies de orquídeas") +
  theme_classic()

# Gráfico de barras plotly
ggplotly(grafico_barras_ggplot2, tooltip = "text") |> 
  config(locale = 'es')

Cantidad de registros de presencia por especie: 10 especies de orquídeas con más registros

Code
registros_especies <-
  orquideas |>
    group_by(species) |>
  summarize(cantidad = n()) |>
  arrange(desc(cantidad)) |>
top_n(n = 10, wt = cantidad)

grafica_2 <-
ggplot(registros_especies, aes(x=reorder(species, -cantidad), y=cantidad)) + 
  geom_bar(stat = "identity"
  ) +
  ggtitle("Presencia de por especies de las 10 especies de orquídeas con más registros") +
  xlab("Especies de Orquídeas") +
  ylab("Cantidad de orquídeas") +
  theme_classic()

# Gráfico de barras plotly
ggplotly(grafica_2, tooltip = "text") |> 
  config(locale = 'es')